package nio.zerocopy;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

/**
 * @author chenyuan
 * @date 2020/11/5 9:50
 */
public class Client {
	public static void main(String[] args) throws IOException {
		SocketChannel socketChannel = SocketChannel.open();
		socketChannel.connect(new InetSocketAddress("localhost", 7001));
		String fileName = "C:\\Users\\chenyuan\\Desktop\\尚硅谷Netty教程\\Netty相关资料\\资料\\protoc-3.6.1-win32.zip";
		FileChannel channel = new FileInputStream(fileName).getChannel();
		long startTime = System.currentTimeMillis();

		// 开始传输
		// transferTo 方法底层使用 零拷贝
		//在 Linux 下，一个 transferTo 方法，就可以完成传输
		//在 Windows 下，transferTo 一次调用只能发送 8M 文件，所以就需要分段传输，而且要注意传输时的位置
		long transfer = channel.transferTo(0, channel.size(), socketChannel);

		System.out.println("发送总的字节数 ：" + transfer + " ，总耗时：" + (System.currentTimeMillis() - startTime));


	}
}
